package com.itheima.demo; // package关键字：声明当前类所在的包，com.itheima.demo是包的完整路径，用于组织代码结构

import java.util.Scanner; // import关键字：导入java.util包中的Scanner类，用于接收用户输入

public class Test { // public：访问修饰符；class：定义类的关键字；Test：类名，这是一个测试类
    public static void main(String[] args) { // public：访问修饰符；static：静态修饰符，表示方法属于类而不是对象；void：返回值类型；main：方法名，是Java程序的入口方法；(String[] args)：参数列表，字符串数组
        // 目标：面向对象编程实现智能家居控制系统。 // 注释说明代码的目标
        // 角色：设备（吊灯，电视机，洗衣机，落地窗，....） // 注释说明系统中的角色
        // 具备的功能：开和关。 // 注释说明设备具备的功能
        // 谁控制他们：智能控制系统（单例对象），控制调用设备的开和关。 // 注释说明控制者
        // 1、定义设备类：创建设备对象代表家里的设备。 // 注释说明第一步
        // 2、准备这些设备对象，放到数组中，代表整个家庭的设备。 // 注释说明第二步
        JD[] jds = new JD[4]; // 创建一个JD类型的数组，长度为4，用于存储4个家电对象
        jds[0] = new TV("小米电视", true); // 数组索引0位置存储一个新的TV对象，名称为"小米电视"，初始状态为开（true）
        jds[1] = new WashMachine("美的洗衣机", false); // 数组索引1位置存储一个新的WashMachine对象，名称为"美的洗衣机"，初始状态为关（false）
        jds[2] = new Lamp("欧灯", true); // 数组索引2位置存储一个新的Lamp对象，名称为"欧灯"，初始状态为开（true）
        jds[3] = new Air("美的空调", false); // 数组索引3位置存储一个新的Air对象，名称为"美的空调"，初始状态为关（false）

        // 3、为每个设备制定一个开个关的功能。定义一个接口，让JD实现开关功能。 // 注释说明第三步
        // 4、创建智能控制系统对象，控制设备开和关。 // 注释说明第四步
        SmartHomeControl smartHomeControl = new SmartHomeControl(); // 创建一个智能控制系统对象
        // 5、控制电视机。 // 注释说明第五步
        // smartHomeControl.control(jds[0]); // 这行代码被注释掉了，它的作用是控制第一台设备（电视机）

        // 6 、提示用户操作，a、展示全部设备的当前情况。b、让用户选择哪一个操作。 // 注释说明第六步
        // 打印全部设备的开和关的现状。 // 注释说明打印功能
        while (true) { // while循环，条件为true表示无限循环，除非在循环内部用break或return跳出
            smartHomeControl.printAllStatus(jds); // 调用智能控制系统的方法，打印所有设备的状态
            System.out.println("请您选择要控制的设备："); // 输出提示信息，让用户选择要控制的设备
            Scanner sc = new Scanner(System.in); // 创建Scanner对象，用于读取用户输入
            String command = sc.next(); // 读取用户输入的字符串，保存到command变量中
            switch (command){ // switch语句，根据command的值执行不同的代码块
                case "1": // 如果用户输入"1"
                    smartHomeControl.control(jds[0]); // 控制第一个设备（电视机）
                    break; // 跳出switch语句
                case "2": // 如果用户输入"2"
                    smartHomeControl.control(jds[1]); // 控制第二个设备（洗衣机）
                    break; // 跳出switch语句
                case "3": // 如果用户输入"3"
                    smartHomeControl.control(jds[2]); // 控制第三个设备（灯）
                    break; // 跳出switch语句
                case "4": // 如果用户输入"4"
                    smartHomeControl.control(jds[3]); // 控制第四个设备（空调）
                    break; // 跳出switch语句
                case "exit": // 如果用户输入"exit"
                    System.out.println("退出App!"); // 输出退出信息
                    return; // 结束main方法，退出程序
                default: // 如果用户输入的不是上述任何一个选项
                    System.out.println("输入有误，请重新输入"); // 输出错误提示信息
            } // switch语句结束
        } // while循环结束
    } // main方法结束
} // Test类结束
